package com.lenin.omena.client;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HTMLPanel;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
import com.lenin.omena.client.event.LoginEvent;
import com.lenin.omena.client.event.LoginEvent.ActionType;
import com.lenin.omena.client.event.LoginEventHandler;
import com.lenin.omena.client.event.SaveUserEvent;
import com.lenin.omena.client.event.SaveUserEventHandler;
import com.lenin.omena.shared.LoginResult;
import com.lenin.omena.shared.SaveUserResult;
import com.lenin.omena.shared.domain.User;


public class LoginForm extends Composite 
	implements LoginEventHandler, SaveUserEventHandler {

	interface MyUiBinder extends UiBinder<Widget, LoginForm> {
	}
	
	private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
	
	
	@UiField
	HTMLPanel statusSpan;
	
	@UiField
	TextBox userNameField;
	
	@UiField
	PasswordTextBox passwordField;
	
	@UiField
	Button loginButton;
	
	public LoginForm() {

		initWidget(uiBinder.createAndBindUi(this));
		
		LoginEvent.register(AppleMarket.getEventBus(), this);
		SaveUserEvent.register(AppleMarket.getEventBus(), this);
		
	}
	
	
	@UiHandler("loginButton")
	void handleClick(ClickEvent event) {
		
		String userName = userNameField.getText();
		String password = passwordField.getText();
		
		String message =
				"Kirjautuminen käynnissä...";

		setStatusText(message, "#666");
		
		AppleMarket.doLogin(userName, password);
		
	}
	
	
	@Override
	public void onLogin(LoginEvent event) {
		
		LoginResult result = event.getResult();
		
		if(event.getActionType() == ActionType.LOGIN) {
		
			if(result.getStatus() == 0) {
			
				User user = result.getUser();
				String message =
					"Tervetuloa, "+user.getUserInfo().getUserName();
			
				setStatusText(message, "#080");
		
			} else if(result.getStatus() == 1 || result.getStatus() == 2){
			
				String message =
						"Virheellinen käyttäjätunnus tai salasana.";

				setStatusText(message, "#800");
		
			} else if(result.getStatus() == 3){
			
				String message =
						"Käyttäjätunnus ei ole aktivoitu. Ohjeet tunnuksen aktivoimiseksi ovat sähköpostissasi.";

				setStatusText(message, "#800");
		
			} else if(result.getStatus() == -1) {
				
				String message =
						"Kirjautuminen epäonnistui. Virhekoodi: -1";
				setStatusText(message, "#800");
				
			}
			
		}
		
	}
	
	
	public void onSaveUser(SaveUserEvent event) {
		
		SaveUserResult result = event.getResult();
		
		if(result.getStatus() == 0) {
			
			
			
			String message = 
					"Kiitos rekisteröinnistäsi! <br />" +
					"Sinulle on lähetetty sähköposti, josta voit aktivoida tunnuksesi. <br />" +
					"Voit kirjautua tästä sisään, kun olet aktivoinut tunnuksesi. <br />";
			
			setStatusText(message, "#080");
			
		}
		
	}
	
	
	
	private void setStatusText(String text, String color) {
		
		statusSpan.getElement().setAttribute("style", "color: "+color);
		statusSpan.getElement().setInnerHTML(text);
		
	}
	
 
}
